package co.edu.usbcali.sap.presentation.backEndBeans;

import co.edu.usbcali.sap.exceptions.*;
import co.edu.usbcali.sap.modelo.*;
import co.edu.usbcali.sap.modelo.dto.ActaSeguimientoProyectoGradoDTO;
import co.edu.usbcali.sap.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.sap.utilities.*;

import com.icesoft.faces.async.render.RenderManager;
import com.icesoft.faces.async.render.Renderable;
import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.inputfile.InputFile;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.icesoft.faces.context.DisposableBean;
import com.icesoft.faces.webapp.xmlhttp.FatalRenderingException;
import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;
import com.icesoft.faces.webapp.xmlhttp.RenderingException;
import com.icesoft.faces.webapp.xmlhttp.TransientRenderingException;

import java.io.File;
import java.math.BigDecimal;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.EventObject;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
import java.util.Vector;

import javax.faces.application.FacesMessage;
import javax.faces.component.html.HtmlInputTextarea;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.DataModel;


/**
*
*
* @author Zathura Code Generator http://code.google.com/p/zathura
*
*/
public class ActaSeguimientoProyectoGradoView extends DataSource
    implements Renderable, DisposableBean {
   
    
 
 
	private HtmlInputTextarea txtAreaSegproCorrecciones;
    private HtmlInputTextarea txtAreaSegproCompromisos;
    private HtmlInputTextarea txtAreaSegproObservaciones;
  	private HtmlInputText txtSegproPorcentaje;
    private HtmlInputText txtSegproTemaReunion;
    private HtmlInputText txtDocproCodigo_DocumentosProyecto;
    private HtmlInputText txtEstCodigo_Estado;
    private HtmlInputText txtProCodigo_Proyecto;
    private HtmlInputText txtSegproCodigo;
    private SelectInputDate txtSegproFecha;
    private HtmlCommandButton btnSave;
    private HtmlCommandButton btnModify;
    private HtmlCommandButton btnDelete;
    private HtmlCommandButton btnClear;
    private HtmlCommandButton btnUpload;
   

	private boolean renderDataTable;
    private boolean flag = true;
    private RenderManager renderManager;
    private PersistentFacesState state = PersistentFacesState.getInstance();
    private List<ActaSeguimientoProyectoGrado> actaSeguimientoProyectoGrado;
    private List<ActaSeguimientoProyectoGradoDTO> actaSeguimientoProyectoGradoDTO;

    private final List fileList = Collections.synchronizedList(new ArrayList());
	private InputFileData currentFile;
	private int fileProgress;
    
    public ActaSeguimientoProyectoGradoView() {
        super("");
    }

    public String action_clear() {
        txtAreaSegproCompromisos.setValue(null);
        txtAreaSegproCompromisos.setDisabled(true);
        txtAreaSegproCorrecciones.setValue(null);
        txtAreaSegproCorrecciones.setDisabled(true);
        txtAreaSegproObservaciones.setValue(null);
        txtAreaSegproObservaciones.setDisabled(true);
        txtSegproPorcentaje.setValue(null);
        txtSegproPorcentaje.setDisabled(true);
        txtSegproTemaReunion.setValue(null);
        txtSegproTemaReunion.setDisabled(true);
       /* txtDocproCodigo_DocumentosProyecto.setValue(null);
        txtDocproCodigo_DocumentosProyecto.setDisabled(true);
        txtEstCodigo_Estado.setValue(null);
        txtEstCodigo_Estado.setDisabled(true);
        txtProCodigo_Proyecto.setValue(null);
        txtProCodigo_Proyecto.setDisabled(true);*/
        txtSegproFecha.setValue(null);
        txtSegproFecha.setDisabled(true);
        txtSegproCodigo.setValue(null);
        txtSegproCodigo.setDisabled(false);
        btnSave.setDisabled(true);
        btnUpload.setDisabled(true);
        btnDelete.setDisabled(true);
        btnModify.setDisabled(true);
        btnClear.setDisabled(false);
        
        fileList.clear();

        return "";
    }

    public void listener_txtId(ValueChangeEvent event) {
        if ((event.getNewValue() != null) && !event.getNewValue().equals("")) {
            ActaSeguimientoProyectoGrado entity = null;

            try {
                Integer segproCodigo = new Integer(txtSegproCodigo.getValue()
                                                                  .toString());
                entity = BusinessDelegatorView.getActaSeguimientoProyectoGrado(segproCodigo);
            } catch (Exception e) {
                // TODO: handle exception
            }

            if (entity == null) {
                txtAreaSegproCompromisos.setDisabled(false);
                txtAreaSegproCorrecciones.setDisabled(false);
                txtAreaSegproObservaciones.setDisabled(false);
                txtSegproPorcentaje.setDisabled(false);
                txtSegproTemaReunion.setDisabled(false);
               // txtDocproCodigo_DocumentosProyecto.setDisabled(false);
               // txtEstCodigo_Estado.setDisabled(false);
               // txtProCodigo_Proyecto.setDisabled(false);
                txtSegproFecha.setDisabled(false);
                txtSegproCodigo.setDisabled(false);
                btnSave.setDisabled(false);
                btnUpload.setDisabled(false);
                btnDelete.setDisabled(true);
                btnModify.setDisabled(true);
                btnClear.setDisabled(false);
            } else {
                txtAreaSegproCompromisos.setValue(entity.getSegproCompromisos());
                txtAreaSegproCompromisos.setDisabled(false);
                txtAreaSegproCorrecciones.setValue(entity.getSegproCorrecciones());
                txtAreaSegproCorrecciones.setDisabled(false);
                txtSegproFecha.setValue(entity.getSegproFecha());
                txtSegproFecha.setDisabled(false);
                txtAreaSegproObservaciones.setValue(entity.getSegproObservaciones());
                txtAreaSegproObservaciones.setDisabled(false);
                txtSegproPorcentaje.setValue(entity.getSegproPorcentaje());
                txtSegproPorcentaje.setDisabled(false);
                txtSegproTemaReunion.setValue(entity.getSegproTemaReunion());
                txtSegproTemaReunion.setDisabled(false);
                /*txtDocproCodigo_DocumentosProyecto.setValue(entity.getDocumentosProyecto()
                                                                  .getDocproCodigo());
                txtDocproCodigo_DocumentosProyecto.setDisabled(false);
                txtEstCodigo_Estado.setValue(entity.getEstado().getEstCodigo());
                txtEstCodigo_Estado.setDisabled(false);
                txtProCodigo_Proyecto.setValue(entity.getProyecto()
                                                     .getProCodigo());
               */// txtProCodigo_Proyecto.setDisabled(false);
                txtSegproCodigo.setValue(entity.getSegproCodigo());
                txtSegproCodigo.setDisabled(true);
                btnSave.setDisabled(true);
                btnUpload.setDisabled(true);
                btnDelete.setDisabled(false);
                btnModify.setDisabled(false);
                btnClear.setDisabled(false);
            }
        }
    }


	public String action_save() {
        try {
    		
			String codigo = txtSegproCodigo.getValue().toString();
			String  fecha= txtSegproFecha.getValue().toString();
			String tema = txtSegproTemaReunion.getValue().toString();
			String correcciones = txtAreaSegproCorrecciones.getValue().toString();
			String compromisos = txtAreaSegproCompromisos.getValue().toString();
			String observaciones = txtAreaSegproObservaciones.getValue().toString();
			String porcentaje = txtSegproPorcentaje.getValue().toString();
			
			if(codigo.equals("")){
				throw new Exception("El c&#243;digo del acta es de caracter obligatorio");
			}
			
			if(Utilities.soloNumeros(codigo)==false){
				throw new Exception("El c&#243;digo del acta no acepta letras ni caracteres especiales como @#$%^&*()");
			}
			
			
			if(fecha.equals("")){
				throw new Exception("La fecha del acta es de caracter obligatorio");
			}
			
			FacesUtils.checkDate(txtSegproFecha);
			
			if(tema.equals("")){
				throw new Exception("El tema del acta es de caracter obligatorio");
			}
			
					
			if(correcciones.equals("")){
				throw new Exception("Las correcciones del acta son de caracter obligatorio");
			}
			
			if(compromisos.equals("")){
				throw new Exception("Los compromisos del acta son de caracter obligatorio");
			}
			
						
			if(observaciones.equals("")){
				throw new Exception("Las observaciones del acta son de caracter obligatorio");
			}
			
			if(porcentaje.equals("")){
				throw new Exception("El porcentaje del acta es de caracter obligatorio");
			}
			
			if(Utilities.soloNumeros(porcentaje)==false){
				throw new Exception("El porcentaje del acta no acepta letras ni caracteres especiales como @#$%^&*()");
			}
			try{
				BusinessDelegatorView.saveActaSeguimientoProyectoGrado(new Integer(codigo), compromisos, correcciones, (Date) txtSegproFecha.getValue(), observaciones, new Integer(porcentaje), tema, new Integer(3),new Integer(6),(Integer)(FacesUtils.getSessionParameter("Codigo")));
			}catch (Exception e){
				
			}
			
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage("Se creo el acta con &#233;xito"));
			
			action_clear();
		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage(e.getMessage()));
		}

		return "";
	}

    public String action_delete() {
        try {
            BusinessDelegatorView.deleteActaSeguimientoProyectoGrado(FacesUtils.checkInteger(
                    txtSegproCodigo));
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
            action_clear();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String action_modify() {
        try {
        	
        
        	String codigo = txtSegproCodigo.getValue().toString();
			String  fecha= txtSegproFecha.getValue().toString();
			String tema = txtSegproTemaReunion.getValue().toString();
			String correcciones = txtAreaSegproCorrecciones.getValue().toString();
			String compromisos = txtAreaSegproCompromisos.getValue().toString();
			String observaciones = txtAreaSegproObservaciones.getValue().toString();
			String porcentaje = txtSegproPorcentaje.getValue().toString();
			
			if(codigo.equals("")){
				throw new Exception("El c&#243;digo del acta es de caracter obligatorio");
			}
			
			if(Utilities.soloNumeros(codigo)==false){
				throw new Exception("El c&#243;digo del acta no acepta letras ni caracteres especiales como @#$%^&*()");
			}
			
			
			if(fecha.equals("")){
				throw new Exception("La fecha del acta es de caracter obligatorio");
			}
			
			FacesUtils.checkDate(txtSegproFecha);
			
			if(tema.equals("")){
				throw new Exception("El tema del acta es de caracter obligatorio");
			}
			
					
			if(correcciones.equals("")){
				throw new Exception("Las correcciones del acta son de caracter obligatorio");
			}
			
			if(compromisos.equals("")){
				throw new Exception("Los compromisos del acta son de caracter obligatorio");
			}
			
						
			if(observaciones.equals("")){
				throw new Exception("Las observaciones del acta son de caracter obligatorio");
			}
			
			if(porcentaje.equals("")){
				throw new Exception("El porcentaje del acta es de caracter obligatorio");
			}
			
			if(Utilities.soloNumeros(porcentaje)==false){
				throw new Exception("El porcentaje del acta no acepta letras ni caracteres especiales como @#$%^&*()");
			}
			try{
				BusinessDelegatorView.updateActaSeguimientoProyectoGrado(new Integer(codigo), compromisos, correcciones, (Date) txtSegproFecha.getValue(), observaciones, new Integer(porcentaje), tema, new Integer(3),new Integer(6),(Integer)(FacesUtils.getSessionParameter("C&#243;digo")));
			}catch (Exception e){
				
			}
			
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage("Se modific&#243; el acta con &#233;xito"));
			
			action_clear();
		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage(e.getMessage()));
		}

		return "";
         
    }
 
    
    public String action_modifyWitDTO(Integer segproCodigo,
        String segproCompromisos, String segproCorrecciones, Date segproFecha,
        String segproObservaciones, Integer segproPorcentaje,
        String segproTemaReunion, Integer docproCodigo_DocumentosProyecto,
        Integer estCodigo_Estado, Integer proCodigo_Proyecto)
        throws Exception {
        try {
            BusinessDelegatorView.updateActaSeguimientoProyectoGrado(segproCodigo,
                segproCompromisos, segproCorrecciones, segproFecha,
                segproObservaciones, segproPorcentaje, segproTemaReunion,
                docproCodigo_DocumentosProyecto, estCodigo_Estado,
                proCodigo_Proyecto);
            renderManager.getOnDemandRenderer(
                "ActaSeguimientoProyectoGradoView").requestRender();
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
        } catch (Exception e) {
            //renderManager.getOnDemandRenderer("ActaSeguimientoProyectoGradoView").requestRender();
            FacesUtils.addErrorMessage(e.getMessage());
            throw e;
        }

        return "";
    }

    public List<ActaSeguimientoProyectoGrado> getActaSeguimientoProyectoGrado() {
        if (flag) {
            try {
                actaSeguimientoProyectoGrado = BusinessDelegatorView.getActaSeguimientoProyectoGrado();
                flag = false;
            } catch (Exception e) {
                flag = true;
                FacesUtils.addErrorMessage(e.getMessage());
            }
        }

        return actaSeguimientoProyectoGrado;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setActaSeguimientoProyectoGrado(
        List<ActaSeguimientoProyectoGrado> actaSeguimientoProyectoGrado) {
        this.actaSeguimientoProyectoGrado = actaSeguimientoProyectoGrado;
    }

    public boolean isRenderDataTable() {
        try {
            if (flag) {
                if (BusinessDelegatorView.findTotalNumberActaSeguimientoProyectoGrado() > 0) {
                    renderDataTable = true;
                } else {
                    renderDataTable = false;
                }
            }

            flag = false;
        } catch (Exception e) {
            renderDataTable = false;
            e.printStackTrace();
        }

        return renderDataTable;
    }

    public DataModel getData() {
        state = PersistentFacesState.getInstance();

        if (onePageDataModel == null) {
            onePageDataModel = new LocalDataModel(pageSize);
        }

        return onePageDataModel;
    }

    /**
    * This is where the Object data is retrieved from the database and
    * returned as a list of objects for display in the UI.
    */
    private DataPage<ActaSeguimientoProyectoGrado> getDataPage(int startRow,
        int pageSize) {
        // Retrieve the total number of objects from the database.  This
        // number is required by the DataPage object so the paginator will know
        // the relative location of the page data.
        int totalNumberActaSeguimientoProyectoGrado = 0;

        try {
            totalNumberActaSeguimientoProyectoGrado = BusinessDelegatorView.findTotalNumberActaSeguimientoProyectoGrado()
                                                                           .intValue();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        // Calculate indices to be displayed in the ui.
        int endIndex = startRow + pageSize;

        if (endIndex > totalNumberActaSeguimientoProyectoGrado) {
            endIndex = totalNumberActaSeguimientoProyectoGrado;
        }

        try {
            actaSeguimientoProyectoGrado = BusinessDelegatorView.findPageActaSeguimientoProyectoGrado(sortColumnName,
                    sortAscending, startRow, endIndex - startRow);

            // Remove this Renderable from the existing render groups.
            //leaveRenderGroups();        			
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        // Add this Renderable to the new render groups.
        //joinRenderGroups();
        // Reset the dirtyData flag.
        onePageDataModel.setDirtyData(false);
        // This is required when using Hibernate.  If the SessionManager is not
        // cleared or closed objects are cached and stale objects will show up
        // in the table.
        // This way, the detached objects are reread from the database.
        // This call is not required with Hibernate, which uses a Query Hint
        // to clear the l2 cache in the DAO.
        flag = true;

        return new DataPage<ActaSeguimientoProyectoGrado>(totalNumberActaSeguimientoProyectoGrado,
            startRow, actaSeguimientoProyectoGrado);
    }

    public DataModel getDataDTO() {
        state = PersistentFacesState.getInstance();

        if (onePageDataModel == null) {
            onePageDataModel = new LocalDataModelDTO(pageSize);
        }

        return onePageDataModel;
    }

    /**
    * This is where the Object data is retrieved from the database and
    * returned as a list of objects for display in the UI.
    */
    private DataPage<ActaSeguimientoProyectoGradoDTO> getDataPageDTO(
        int startRow, int pageSize) {
        // Retrieve the total number of objects from the database.  This
        // number is required by the DataPage object so the paginator will know
        // the relative location of the page data.
        int totalNumberActaSeguimientoProyectoGrado = 0;

        try {
            totalNumberActaSeguimientoProyectoGrado = BusinessDelegatorView.findTotalNumberActaSeguimientoProyectoGrado()
                                                                           .intValue();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        // Calculate indices to be displayed in the ui.
        int endIndex = startRow + pageSize;

        if (endIndex > totalNumberActaSeguimientoProyectoGrado) {
            endIndex = totalNumberActaSeguimientoProyectoGrado;
        }

        try {
            actaSeguimientoProyectoGrado = BusinessDelegatorView.findPageActaSeguimientoProyectoGrado(sortColumnName,
                    sortAscending, startRow, endIndex - startRow);

            if (Utilities.validationsList(actaSeguimientoProyectoGrado)) {
                actaSeguimientoProyectoGradoDTO = new ArrayList<ActaSeguimientoProyectoGradoDTO>();

                for (ActaSeguimientoProyectoGrado actaSeguimientoProyectoGradoTmp : actaSeguimientoProyectoGrado) {
                    ActaSeguimientoProyectoGradoDTO actaSeguimientoProyectoGradoDTO2 =
                        new ActaSeguimientoProyectoGradoDTO();
                    actaSeguimientoProyectoGradoDTO2.setSegproCodigo(actaSeguimientoProyectoGradoTmp.getSegproCodigo()
                                                                                                    .toString());
                    actaSeguimientoProyectoGradoDTO2.setSegproCompromisos((actaSeguimientoProyectoGradoTmp.getSegproCompromisos() != null)
                        ? actaSeguimientoProyectoGradoTmp.getSegproCompromisos()
                                                         .toString() : null);
                    actaSeguimientoProyectoGradoDTO2.setSegproCorrecciones((actaSeguimientoProyectoGradoTmp.getSegproCorrecciones() != null)
                        ? actaSeguimientoProyectoGradoTmp.getSegproCorrecciones()
                                                         .toString() : null);
                    actaSeguimientoProyectoGradoDTO2.setSegproFecha(actaSeguimientoProyectoGradoTmp.getSegproFecha());
                    actaSeguimientoProyectoGradoDTO2.setSegproObservaciones((actaSeguimientoProyectoGradoTmp.getSegproObservaciones() != null)
                        ? actaSeguimientoProyectoGradoTmp.getSegproObservaciones()
                                                         .toString() : null);
                    actaSeguimientoProyectoGradoDTO2.setSegproPorcentaje((actaSeguimientoProyectoGradoTmp.getSegproPorcentaje() != null)
                        ? actaSeguimientoProyectoGradoTmp.getSegproPorcentaje()
                                                         .toString() : null);
                    actaSeguimientoProyectoGradoDTO2.setSegproTemaReunion((actaSeguimientoProyectoGradoTmp.getSegproTemaReunion() != null)
                        ? actaSeguimientoProyectoGradoTmp.getSegproTemaReunion()
                                                         .toString() : null);
                    actaSeguimientoProyectoGradoDTO2.setDocproCodigo_DocumentosProyecto((actaSeguimientoProyectoGradoTmp.getDocumentosProyecto()
                                                                                                                        .getDocproCodigo() != null)
                        ? actaSeguimientoProyectoGradoTmp.getDocumentosProyecto()
                                                         .getDocproCodigo()
                                                         .toString() : null);
                    actaSeguimientoProyectoGradoDTO2.setEstCodigo_Estado((actaSeguimientoProyectoGradoTmp.getEstado()
                                                                                                         .getEstCodigo() != null)
                        ? actaSeguimientoProyectoGradoTmp.getEstado()
                                                         .getEstCodigo()
                                                         .toString() : null);
                    actaSeguimientoProyectoGradoDTO2.setProCodigo_Proyecto((actaSeguimientoProyectoGradoTmp.getProyecto()
                                                                                                           .getProCodigo() != null)
                        ? actaSeguimientoProyectoGradoTmp.getProyecto()
                                                         .getProCodigo()
                                                         .toString() : null);
                    actaSeguimientoProyectoGradoDTO2.setActaSeguimientoProyectoGrado(actaSeguimientoProyectoGradoTmp);
                    actaSeguimientoProyectoGradoDTO2.setActaSeguimientoProyectoGradoView(this);
                    actaSeguimientoProyectoGradoDTO.add(actaSeguimientoProyectoGradoDTO2);
                }
            }

            // Remove this Renderable from the existing render groups.
            leaveRenderGroups();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        // Add this Renderable to the new render groups.
        joinRenderGroups();
        // Reset the dirtyData flag.
        onePageDataModel.setDirtyData(false);
        // This is required when using Hibernate.  If the SessionManager is not
        // cleared or closed objects are cached and stale objects will show up
        // in the table.
        // This way, the detached objects are reread from the database.
        // This call is not required with Hibernate, which uses a Query Hint
        // to clear the l2 cache in the DAO.
        flag = true;

        return new DataPage<ActaSeguimientoProyectoGradoDTO>(totalNumberActaSeguimientoProyectoGrado,
            startRow, actaSeguimientoProyectoGradoDTO);
    }

    protected boolean isDefaultAscending(String sortColumn) {
        return true;
    }

    /**
    * This method is called when a render call is made from the server. Render
    * calls are only made to views containing an updated record. The data is
    * marked as dirty to trigger a fetch of the updated record from the
    * database before rendering takes place.
    */
    public PersistentFacesState getState() {
        onePageDataModel.setDirtyData();

        return state;
    }

    /**
    * This method is called from faces-config.xml with each new session.
    */
    public void setRenderManager(RenderManager renderManager) {
        this.renderManager = renderManager;
    }

    public void renderingException(RenderingException arg0) {
        if (arg0 instanceof TransientRenderingException) {
        } else if (arg0 instanceof FatalRenderingException) {
            // Remove from existing Customer render groups.
            leaveRenderGroups();
        }
    }

    /**
    * Remove this Renderable from existing uiCustomerBeans render groups.
    * OnDemandRenderers are named/created using the underlying Customer Number.
    */
    private void leaveRenderGroups() {
        if (Utilities.validationsList(actaSeguimientoProyectoGradoDTO)) {
            for (ActaSeguimientoProyectoGradoDTO actaSeguimientoProyectoGradoTmp : actaSeguimientoProyectoGradoDTO) {
                renderManager.getOnDemandRenderer(
                    "ActaSeguimientoProyectoGradoView").remove(this);
            }
        }
    }

    /**
    * Add this Renderable to the new uiCustomerBeans render groups.
    * OnDemandRenderers are named/created using the underlying Customer Number.
    */
    private void joinRenderGroups() {
        if (Utilities.validationsList(actaSeguimientoProyectoGradoDTO)) {
            for (ActaSeguimientoProyectoGradoDTO actaSeguimientoProyectoGradoTmp : actaSeguimientoProyectoGradoDTO) {
                renderManager.getOnDemandRenderer(
                    "ActaSeguimientoProyectoGradoView").add(this);
            }
        }
    }

    public void dispose() throws Exception {
    }

    public RenderManager getRenderManager() {
        return renderManager;
    }

    public void setState(PersistentFacesState state) {
        this.state = state;
    }

    //////////////////////////////MODIFICADOS///////////////////////////////////
    public HtmlInputTextarea getTxtAreaSegproCorrecciones() {
		return txtAreaSegproCorrecciones;
	}

	public void setTxtAreaSegproCorrecciones(
			HtmlInputTextarea txtAreaSegproCorrecciones) {
		this.txtAreaSegproCorrecciones = txtAreaSegproCorrecciones;
	}
	
	 public HtmlInputTextarea getTxtAreaSegproObservaciones() {
			return txtAreaSegproObservaciones;
		}

		public void setTxtAreaSegproObservaciones(
				HtmlInputTextarea txtAreaSegproObservaciones) {
			this.txtAreaSegproObservaciones = txtAreaSegproObservaciones;
		}
		
		   public HtmlInputTextarea getTxtAreaSegproCompromisos() {
				return txtAreaSegproCompromisos;
			}

			public void setTxtAreaSegproCompromisos(
					HtmlInputTextarea txtAreaSegproCompromisos) {
				this.txtAreaSegproCompromisos = txtAreaSegproCompromisos;
			}
		
			 public HtmlCommandButton getBtnUpload() {
					return btnUpload;
				}

				public void setBtnUpload(HtmlCommandButton btnUpload) {
					this.btnUpload = btnUpload;
				}

////////////////////////////////////////////////
    


    public HtmlInputText getTxtSegproPorcentaje() {
        return txtSegproPorcentaje;
    }

    public void setTxtSegproPorcentaje(HtmlInputText txtSegproPorcentaje) {
        this.txtSegproPorcentaje = txtSegproPorcentaje;
    }

    public HtmlInputText getTxtSegproTemaReunion() {
        return txtSegproTemaReunion;
    }

    public void setTxtSegproTemaReunion(HtmlInputText txtSegproTemaReunion) {
        this.txtSegproTemaReunion = txtSegproTemaReunion;
    }

    public HtmlInputText getTxtDocproCodigo_DocumentosProyecto() {
        return txtDocproCodigo_DocumentosProyecto;
    }

    public void setTxtDocproCodigo_DocumentosProyecto(
        HtmlInputText txtDocproCodigo_DocumentosProyecto) {
        this.txtDocproCodigo_DocumentosProyecto = txtDocproCodigo_DocumentosProyecto;
    }

    public HtmlInputText getTxtEstCodigo_Estado() {
        return txtEstCodigo_Estado;
    }

    public void setTxtEstCodigo_Estado(HtmlInputText txtEstCodigo_Estado) {
        this.txtEstCodigo_Estado = txtEstCodigo_Estado;
    }

    public HtmlInputText getTxtProCodigo_Proyecto() {
        return txtProCodigo_Proyecto;
    }

    public void setTxtProCodigo_Proyecto(HtmlInputText txtProCodigo_Proyecto) {
        this.txtProCodigo_Proyecto = txtProCodigo_Proyecto;
    }

    public SelectInputDate getTxtSegproFecha() {
        return txtSegproFecha;
    }

    public void setTxtSegproFecha(SelectInputDate txtSegproFecha) {
        this.txtSegproFecha = txtSegproFecha;
    }

    public HtmlInputText getTxtSegproCodigo() {
        return txtSegproCodigo;
    }

    public void setTxtSegproCodigo(HtmlInputText txtSegproCodigo) {
        this.txtSegproCodigo = txtSegproCodigo;
    }

    public HtmlCommandButton getBtnSave() {
        return btnSave;
    }

    public void setBtnSave(HtmlCommandButton btnSave) {
        this.btnSave = btnSave;
    }

    public HtmlCommandButton getBtnModify() {
        return btnModify;
    }

    public void setBtnModify(HtmlCommandButton btnModify) {
        this.btnModify = btnModify;
    }

    public HtmlCommandButton getBtnDelete() {
        return btnDelete;
    }

    public void setBtnDelete(HtmlCommandButton btnDelete) {
        this.btnDelete = btnDelete;
    }

    public HtmlCommandButton getBtnClear() {
        return btnClear;
    }

    public void setBtnClear(HtmlCommandButton btnClear) {
        this.btnClear = btnClear;
    }

    public void setRenderDataTable(boolean renderDataTable) {
        this.renderDataTable = renderDataTable;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    public List<ActaSeguimientoProyectoGradoDTO> getActaSeguimientoProyectoGradoDTO() {
        return actaSeguimientoProyectoGradoDTO;
    }

    public void setActaSeguimientoProyectoGradoDTO(
        List<ActaSeguimientoProyectoGradoDTO> actaSeguimientoProyectoGradoDTO) {
        this.actaSeguimientoProyectoGradoDTO = actaSeguimientoProyectoGradoDTO;
    }

    public TimeZone getTimeZone() {
        return java.util.TimeZone.getDefault();
    }

    /**
    * A special type of JSF DataModel to allow a datatable and datapaginator
    * to page through a large set of data without having to hold the entire
    * set of data in memory at once.
    * Any time a managed bean wants to avoid holding an entire dataset,
    * the managed bean declares this inner class which extends PagedListDataModel
    * and implements the fetchData method. fetchData is called
    * as needed when the table requires data that isn't available in the
    * current data page held by this object.
    * This requires the managed bean (and in general the business
    * method that the managed bean uses) to provide the data wrapped in
    * a DataPage object that provides info on the full size of the dataset.
    */
    private class LocalDataModel extends PagedListDataModel {
        public LocalDataModel(int pageSize) {
            super(pageSize);
        }

        public DataPage<ActaSeguimientoProyectoGrado> fetchPage(int startRow,
            int pageSize) {
            // call enclosing managed bean method to fetch the data
            return getDataPage(startRow, pageSize);
        }
    }

    private class LocalDataModelDTO extends PagedListDataModel {
        public LocalDataModelDTO(int pageSize) {
            super(pageSize);
        }

        public DataPage<ActaSeguimientoProyectoGradoDTO> fetchPage(
            int startRow, int pageSize) {
            // call enclosing managed bean method to fetch the data
            return getDataPageDTO(startRow, pageSize);
        }
    }
    
    public void uploadFile(ActionEvent event) {

		try {

			InputFile inputFile = (InputFile) event.getSource();
			if (inputFile.getStatus() == InputFile.SAVED) {

				currentFile = new InputFileData(inputFile.getFileInfo(),
						inputFile.getFile());

				synchronized (fileList) {
					if (fileList.size() < 1) {
						fileList.add(currentFile);
					} else {
						FacesUtils
								.addErrorMessage("Solo se puede subir un archivo");
					}
				}

			}

		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage("",
					new FacesMessage(e.getMessage()));
		}

	}

	public InputFileData getCurrentFile() {
		return currentFile;
	}

	public void setCurrentFile(InputFileData currentFile) {
		this.currentFile = currentFile;
	}

	public int getFileProgress() {
		return fileProgress;
	}

	public void setFileProgress(int fileProgress) {
		this.fileProgress = fileProgress;
	}

	public List getFileList() {
		return fileList;
	}

	/**
	 * <p>
	 * This method is bound to the inputFile component and is executed multiple
	 * times during the file upload process. Every call allows the user to finds
	 * out what percentage of the file has been uploaded. This progress
	 * information can then be used with a progressBar component for user
	 * feedback on the file upload progress.
	 * </p>
	 * 
	 * @param event
	 *            holds a InputFile object in its source which can be probed for
	 *            the file upload percentage complete.
	 */
	public void fileUploadProgress(EventObject event) {
		// System.out.println("ENTRO AL FILEUPLOADPROGRESS");
		InputFile ifile = (InputFile) event.getSource();
		fileProgress = ifile.getFileInfo().getPercent();
		// renderManager.getOnDemandRenderer(sessionId).requestRender();
	}

	public String action_guardar() {
		try {
			List<File> doc = new ArrayList<File>();
			for (int i = 0; i < fileList.size(); i++) {
				InputFileData inputfile = (InputFileData) fileList.get(i);

				doc.add(inputfile.getFile());
				System.out.println(doc.get(i).getAbsolutePath());
				System.out.println(doc.get(i).getName());
			}
			BusinessDelegatorView.saveDocuments(doc, FacesUtils
					.checkInteger(txtSegproCodigo));
		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage("",
					new FacesMessage(e.getMessage()));
		}
		return "";
	}

	/**
	 * <p>
	 * Allows a user to remove a file from a list of uploaded files. This
	 * methods assumes that a request param "fileName" has been set to a valid
	 * file name that the user wishes to remove or delete
	 * </p>
	 * 
	 * @param event
	 *            jsf action event
	 */
	public void removeUploadedFile(ActionEvent event) {
		// Get the inventory item ID from the context.
		FacesContext context = FacesContext.getCurrentInstance();
		Map map = context.getExternalContext().getRequestParameterMap();
		String fileName = (String) map.get("fileName");

		synchronized (fileList) {
			InputFileData inputFileData;
			for (int i = 0; i < fileList.size(); i++) {
				inputFileData = (InputFileData) fileList.get(i);
				// remove our file
				if (inputFileData.getFileInfo().getFileName().equals(fileName)) {
					fileList.remove(i);
					break;
				}
			}
		}
	}
    
}
